package com.douma.第15天;

import java.util.HashSet;
import java.util.Scanner;

/**
 * 抖码算法，让算法学习变的简单有趣
 *
 * @作者 : 老汤
 */
public class 相对开音节 {

    /*
    题目 2：相对开音节

    相对开音节构成的结构为辅音 + 元音 (aeiou) + 辅音 (r 除外) + e，常见的单词有 bike、cake 等。
    给定一个字符串，以空格为分隔符，反转每个单词中的字母，若单词中包含如数字等其他非字母时不进行反转。
    反转后计算其中含有相对开音节结构的子串个数 (连续的子串中部分字符可以重复)

    输入描述：
    输入一行字符串，以空格分割的多个单词，字符串长度 < 10000，字母只考虑小写

    输出描述：
    含有相对开音节结构的子串个数，注：个数 < 10000

    示例 1
    输入
    ekam a ekac

    输出
    2

    说明：
    反转后为 make a cake，其中 make 、cake 为相对开音节子串，所以输出 2

    示例 2
    输入
    !ekam a ekekac

    输出
    2

    说明：反转后为 !ekam a cakeke ，因为 !ekam 含非英文字母，所以未反转，其中 cake、keke 为相对开音节子串，所以，最终输出 2
     */

    // 初始化元音字符
    static HashSet<Character> yuanyin = new HashSet<>();

    static {
        yuanyin.add('a');
        yuanyin.add('e');
        yuanyin.add('i');
        yuanyin.add('o');
        yuanyin.add('u');
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 处理输入
        String input = sc.nextLine();
        String[] words = input.split(" ");

        // 反转每个单词
        for (int i = 0; i < words.length; i++) {
            words[i] = reverse(words[i]);
        }

        // 统计每个单词中的相对开音节的个数，累加得到最终结果
        int res = 0;
        for (int i = 0; i < words.length; i++) {
            res += countKaiYinJie(words[i]);
        }

        System.out.println(res);
        sc.close();
    }

    private static int countKaiYinJie(String word) {
        int res = 0;
        if (word.length() < 4) return res;

        for (int i = 0; i <= word.length() - 4; i++) {
            char c1 = word.charAt(i);
            char c2 = word.charAt(i + 1);
            char c3 = word.charAt(i + 2);
            char c4 = word.charAt(i + 3);
            // 相对开音节构成的结构为辅音 + 元音 (aeiou) + 辅音 (r 除外) + e
            if (!yuanyin.contains(c1)
                    && yuanyin.contains(c2)
                    && !yuanyin.contains(c3) && c3 != 'r'
                    && c4 == 'e') {
                res++;
            }
        }

        return res;
    }

    private static String reverse(String str) {
        char[] chars = str.toCharArray();
        int left = 0, right = chars.length - 1;
        while (left <= right) {
            // 如果遇到非字母的话，则直接返回原字符串，不进行反转
            if (!Character.isLetter(chars[left])
                    || !Character.isLetter(chars[right])) {
                return str;
            }
            char c = chars[left];
            chars[left] = chars[right];
            chars[right] = c;
            left++;
            right--;
        }
        return new String(chars);
    }
}
